Scaling
replicas can be used for scaling. You must also think about storage.
DaemonSets
[DaemonSets] allow you to run a service on each node. You can do this for node specific things like collecting logs on each node. DaemonSets
are yet another kind of controller for Pods beyond [[Deployments]]
If you switch from a Deployment to a DaemonSet you should delete the Deployment first. You can’t automatically change from one kind of controller to another.
A DaemonSet runs a control loop that will watch for any new nodes and start a pod on that node.
Use cases for DaemonSets:
- Want to run a pod on every node
- you have only a subset of nodes that can receive traffic from the internet -> use labels to achieve this.
Labeling A Node For DaemonSets
This allows you to select which nodes the Daemonset runs on:
% cat pi/proxy/daemonset/nginx-ds-nodeSelector.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: pi-proxy
labels:
kiamol: ch06
spec:
selector:
matchLabels:
app: pi-proxy
template:
metadata:
labels:
app: pi-proxy
spec:
...
nodeSelector:
kiamol: ch06
To use thie above yaml, you have to label your node like this:
kl label node $(kl get nodes...) kiamol=ch06 --overwrite
Cascade Delete
TLDR; you probably don’t need this
You can set cascade=False
to delete a controller without deleting its managed objects. This is how you can change a controller but still keep pods alive.
kl delete ds pi-proxy --cascade=orphan # deletes the daemonset pi-proxy
Controllers use a label selector to find objects they manage, so you just have to make sure the new controller you define has the right label. Hamel: it’s not clear how to switch from a Daemonset to a deployment.